#pragma once
#include "../Utilities/utilities.h"

class BaseCamera
{
protected:
	Matrix m_maWorld;
	Matrix m_maView;
	Matrix m_maProjection;

	GLboolean m_bIsChanged;
	Vector3 m_vPosition;
public:
protected:
	virtual void UpdateWVMatrix() = 0;
public:
	virtual Matrix GetWorldMatrix() = 0;
	virtual Matrix GetVPMatrix() = 0;
	virtual Vector3 GetPosition() = 0;

	virtual void SetPosition(Vector3 pos) = 0;

	///Update Camera
	virtual void Update(ESContext *esContext, GLfloat deltaTime) = 0;

	///Move Camera
	virtual void MoveLeft(GLfloat offset) = 0;
	virtual void MoveRight(GLfloat offset) = 0;
	virtual void MoveUp(GLfloat offset) = 0;
	virtual void MoveDown(GLfloat offset) = 0;
	virtual void MoveForward(GLfloat offset) = 0;
	virtual void MoveBackward(GLfloat offset) = 0;
	virtual void RotateLeft(GLfloat offset) = 0;
	virtual void RotateRight(GLfloat offset) = 0;
	virtual void RotateUp(GLfloat offset) = 0;
	virtual void RotateDown(GLfloat offset) = 0;
};